/*
 * @Descripttion: 默认配置
 * @version: 
 * @Author: turingchang
 * @Date: 2020-08-22 16:18:21
 * @LastEditors: turingchang
 * @LastEditTime: 2020-12-23 15:29:54
 */



const path = require('path');
const time =require('../app/common/utils/time');

module.exports = appInfo => {
  return {
    keys: "UserName=schedule",    
    cluster:{
      listen: {
        port: 6002,
        hostname: '127.0.0.1', // 不建议设置 hostname 为 '0.0.0.0'，它将允许来自外部网络和来源的连接，请在知晓风险的情况下使用
        // path: '/var/run/egg.sock',
      }
    },
    view: {
      defaultViewEngine: 'nunjucks',
      mapping: {
        '.tpl': 'nunjucks',
      }
    },
    userLogger:{ //用户自定义log配置
      requestLogger:{ //自定义log名称.请求日志
        level: 'debug',//log等级.debug输出所有状态
        file:path.join(appInfo.root, `logs/sys/request/${time.moment().format('YYYY-MM')}/${time.moment().format('DD')}/${time.moment().format('HH')}.log`),//log json文件保存地址，便于上传log
      },
      commonLogger:{ //公共日志
        level: 'debug',//log等级.debug输出所有状态
        file:path.join(appInfo.root, `logs/sys/common/${time.moment().format('YYYY-MM')}/${time.moment().format('DD')}/${time.moment().format('HH')}.log`),//log json文件保存地址，便于上传log
      },
    },    
    logger: {
      level: 'DEBUG',
      //file:`${appInfo.root}/logs/ulog/${appInfo.name}/${appInfo.name}-web.log`,
      allowDebugAtProd: true, //生产环境也打印日志,调试环境则输出终端
      outputJSON: true,
    },
    // customLogger: {
    //   // requestLogger: { //this.app.getLogger('requestLogger').info(data);
    //   //   file: path.join(appInfo.root, 'logs/ulog/request/request.log'),
    //   //   level: 'DEBUG',
    //   //   allowDebugAtProd: false,
    //   //   outputJSON: true,
    //   // },
    // },
    jsonp: {
      callback: 'callback', // 识别 query 中的 `callback` 参数
      limit: 100, // 函数名最长为 100 个字符
    },
    sequelize: {
      dialect: 'mssql', // support: mysql, mariadb, postgres, mssql
      database: 'dfhonsys', //数据库名
      host: '121.41.106.239',
      port: 1433,
      username: 'zsy',
      password: '123456',
      // 是否自动进行下划线转换（这里是因为DB默认的命名规则是下划线方式，而我们使用的大多数是驼峰方式）
      underscored: true,
      // 时区，sequelize有很多自动时间的方法，都是和时区相关的，记得设置成东8区（+08:00）
      timezone: '+08:00',
      dialectOptions: {
        dateStrings: true,
        typeCast(field, next) {
          // for reading from database
          if (field.type === "DATETIME") {
            return field.string();
          }
          return next();
        }
      },
    },
    // 加载中间件
    middleware: ['configHandler','load','authHandler', 'xrpc', 'forbidIp', 'forbidRouter',  'errorHandler','xsoaHandler','scheduleHandler' ],
    configHandler: {
      //filter: [],//需要强制检查是否已设置的配置名称
      enable: true, 
    },
    load:{
      enable: true, 
    },
    errorHandler: {
      // 只对 /api 前缀的 url 路径生效
      // match: '/api',
      match: '',
      enable: true, //是否启用此插件
    },
    authHandler: {
      enable: false, //是否启用此插件
      allowed: [ //验证token时不需要鉴权的路由
        '/',
        '/api/home/login'
      ],
    },
    xrpc: {
      enable: false, //是否启用此插件
    },
    forbidIp: {
      enable: true, //是否启用此插件
    },
    forbidRouter: {
      enable: true, //是否启用此插件
    },    
    xsoaHandler: {
      enable: false, //是否启用此插件.
      center:'http://localhost:6001/api/center',  //服务中心链接
      localServerName:'schedule', //需要注册到服务中心的名称
    }, 
    scheduleHandler: {
      enable: true, //是否启用此插件.是否自动启动数据库中未正常运行的计划任务
    }, 
    jwt: {
      secret: 'admin-api', //加密密钥
      expire: '60 * 1000 * 20',// '60 * 1000 * 20' 20分钟后失效。  token过期时间，毫秒时间
    },
    security: { //安全组件，防http攻击
      xframe: {
        enable: false,
      },
      ipBlackList: [
        '',
      ],
      csrf: {
        enable: false, //只需将这个设为false则关闭安全验证，框架默认是开启的。 https://eggjs.org/zh-cn/core/security.html
        // type: 'ctoken',
        // ignoreJSON: false,
        // useSession: false,
        // cookieName: 'csrfToken',
        // sessionName: 'csrfToken',
        // headerName: 'x-csrf-token',
        // bodyName: '_csrf',
        // queryName: '_csrf',
        // refererWhiteList: [],
      },
      domainWhiteList: [ '*' ]
    },
    console:{
      request:{
        style:`------------------------------------>>>>>>>>> ${appInfo.name} <<<<<<<<<------------------------------------ \n`,
      },      
    },
    validatePlus :{
      resolveError(ctx, errors) {
        if (errors.length) {
          ctx.validateHandler(errors,'params');
          // ctx.type = 'json';
          // ctx.status = 400;
          // ctx.body = {
          //   code: 400,
          //   error: errors,
          //   message: '参数错误',
          // };
        }
      }
    },
    cors:{
      origin: '*',
      allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH,OPTIONS'
    }

  };
}